#include "encoder.h"

/**
 * @brief 硬件映射，根据主板引脚和drivers_encoder.h里的枚举修改
 * @note 记得要改
 */
//编码器号定义
#define ENCODER_LEFT QTIMER1_ENCODER1
//计数通道
#define ENCODER_LEFT_LSB QTIMER1_ENCODER1_CH1_C0
//方向通道
#define ENCODER_LEFT_DIR QTIMER1_ENCODER1_CH2_C1


#define ENCODER_RIGHT QTIMER2_ENCODER2
#define ENCODER_RIGHT_LSB QTIMER2_ENCODER2_CH1_C5
#define ENCODER_RIGHT_DIR QTIMER2_ENCODER2_CH2_C25


//维护下面五个变量即可

//因为需要频繁被中断调用，防止被编译器优化
volatile int16_t left_encoder_count = 0;   //左编码器计数值
volatile int16_t right_encoder_count = 0;   // 右编码器计数值

//距离起止标志
int dis1_measure_flag = 1; //左轮
int dis2_measure_flag = 1; //右轮
//距离测量值
double distance_measure[2] = {0};
/**
 * @brief 两个方向编码器初始化
 * 
 */
void encoder_init(void)
{   //左编码器
    encoder_dir_init(ENCODER_LEFT, ENCODER_LEFT_LSB, ENCODER_LEFT_DIR);
    //右编码器
    encoder_dir_init(ENCODER_RIGHT, ENCODER_RIGHT_LSB, ENCODER_RIGHT_DIR);
}

/**
 * @brief 更新左编码器计数值
 * 
 */
void left_encoder_get_count(void)
{
    left_encoder_count = encoder_get_count(ENCODER_LEFT);
    encoder_clear_count(ENCODER_LEFT);
}


/**
 * @brief 更新右编码器计数值
 * 
 */
void right_encoder_get_count(void)
{
    right_encoder_count = encoder_get_count(ENCODER_RIGHT);
    encoder_clear_count(ENCODER_RIGHT);
}

/**
 * @brief 更新左右编码器计数值
 * 
 */
void encoder_all_get_count(void)
{
    left_encoder_get_count();
    right_encoder_get_count();
}








